import type {HyFormItemNetWorkPublicInterface} from "@/interface/HyFormInterface";
import type {
  HyCustomButtonInterface,
  HyDeleteButtonInterface,
  HyInsertButtonInterface, HySelectButtonInterface,
  HyUpdateButtonInterface
} from "@/interface/HyButtonInterface";

/**
 * @name: HyTableInterface
 * @data: 2024/7/3 9:47
 *
 * 关于el-table的二次封装
 *
 */

/**
 * 分页器配置接口
 *
 */
export interface HyElPaginationInterface {
  /** 分页器大小 */
  size?:"'large'| 'default'| 'small",
  /** 是否显示背景颜色 */
  background?:boolean,
  /** 一页显示的个数,默认为10 */
  pageSize?:number,
  /** 设置最大页码按钮数。
   * 页码按钮的数量，当总页数超过该值时会折叠
   * 默认为7
   */
  pagerCount?:number,
  /**
   * 这里的类型我们不再写了,请前往element-plus进行查看
   * https://element-plus.org/zh-CN/component/pagination.html#api
   */
  layout?: string,
  /** 是否禁用 */
  disabled?: boolean,
  /** 只有一页时是否隐藏 */
  hideOnSinglePage?: boolean,

}

/**
 * 表格整体配置
 */
export default interface HyTableInterface extends HyFormItemNetWorkPublicInterface<any,any>{
  /** 表格宽度的宽度 */
  width?: string
  /** 表格数据 */
  tableData?:[],
  /** 表格展示字段(如果传入,data将失效) */
  column:Array<HyTableColumnInterface>,
  /**
   * @deprecated 已废弃，请使用internalBtnList(内部按钮列表) 或 externalBtnList(外部按钮列表)
   * 按钮存放的位置 internal表示表格内部, external表示表格外部 */
  btnPosition?:"internal" | "external",
  /** 表格内部显示的按钮列表 */
  internalBtnList?:Array<HyInsertButtonInterface | HyDeleteButtonInterface | HyUpdateButtonInterface | HySelectButtonInterface | HyCustomButtonInterface>,
  /** 表格外显示的按钮列表 */
  externalBtnList?:Array<HyInsertButtonInterface | HyDeleteButtonInterface | HyUpdateButtonInterface | HySelectButtonInterface | HyCustomButtonInterface>,
  /**
   * @deprecated 已废弃，请使用internalBtnList(内部按钮列表) 或 externalBtnList(外部按钮列表)
   * 操作按钮列表
   * */
  operating?:Array<HyInsertButtonInterface | HyDeleteButtonInterface | HyUpdateButtonInterface | HySelectButtonInterface | HyCustomButtonInterface>
  /** 是否显示复选框 */
  selection?:boolean
  /** 是否开启单击一行时选中,默认为false */
  isSelectionByRow?:boolean,
  /**
   * 分页器配置,如果分页器配置存在,才会显示分页器
   * 那就有杠精要问了,我就不想配置,还要去显示分页器,咋办??
   * 所以…………,我们还是加上吧 (●ˇ∀ˇ●)
   */
  paginationConfig?:HyElPaginationInterface,
  /** 是否显示分页器 */
  isShowPagination?:boolean,
  /** pageSize别名字段,用于自定义 */
  pageSizeField?:string,
  /** pageSize的默认值，默认为10 */
  pageSizeDefaultNum?:number,
  /** pageNum别名字段，用于自定义 */
  pageNumField?: string,
  /** pageNum的默认值, 默认为1 */
  pageNumDefaultNum?:number,
}


/**
 * 表格一行的接口,
 */
export interface HyTableColumnInterface {
  /**
   * 对应列的类型。
   * <p>如果设置了selection则显示多选框;<p>
   * <p>如果设置了 index 则显示该行的索引（从 1 开始计算）<p>
   * <p>如果设置了 expand 则显示为一个可展开的按钮<p>
   */
  type?:'default' | 'selection' | 'index' | 'expand',
  /** 字段名称,与后端对应 */
  prop: string,
  /** 显示在表格的标题 */
  label: string,
  /** 对应列的宽度 */
  width?: string
  /** 对应列的最小宽度 */
  minWidth?: string,
  /**
   * 显示的回调,需要return出来,
   *  <p>可以是普通的字符串<p>
   *  <p>也可以是html片段<p>
   * @param rows 字段值
   * @param index 下标
   */
  columnShowCallback?: (rows:any,index?:number)=>any,
  /** 当内容过长被隐藏时显示 tooltip */
  showOverflowTooltip?: boolean,
  /** 对齐方式 */
  align?: 'left' | 'center' | 'right',
}

// /** 表格中的按钮接口 */
// export interface HyTableButtonInterface {
//   /** 按钮类型 */
//   operationType: "insert" | "delete" | "update" | "select" | "custom",
//   /** 按钮显示的文本 */
//   label?:string,
//   /** 按钮显示类型,和element中的type相同 */
//   type?:'primary'| 'success'| 'warning'| 'danger'| 'info'| 'text',
//   /** 是否为朴素按钮 */
//   plain?: boolean,
//   size?: 'large'| 'default'| 'small',
//   /** 是否为圆角按钮 */
//   round?: boolean,
//   /** 是否为圆形按钮 */
//   circle?: boolean,
//   /** 单击的回调 */
//   clickCallback?: (rows:any)=>void,
//
// }
